/**
 * 添加拦截器:
 *   拦截 request 请求
 *   拦截 uploadFile 文件上传
 *
 * TODO:
 *   1. 非 http 开头需拼接地址
 *   2. 请求超时
 *   3. 添加小程序端请求头标识
 *   4. 添加 token 请求头标识
 */



const baseURL = "https://ai-sbbs.xyz/api";
import { commonStorage } from "@/utils/common.js";

// 添加拦截器
const httpInterceptor = {
    // 拦截前触发
    invoke(options) {
        // console.log(options)
        if (options.url.includes('/yuanfenju')){
            // options.url = 'https://api.yuanfenju.com' + options.url
            // return
        }else{
            // 1. 非 http 开头需拼接地址
            if (!options.url.startsWith("http")) {
                options.url = baseURL + options.url;
            }
        }

        // 2. 请求超时, 默认 60s
        options.timeout = 100000;
        // 3. 添加小程序端请求头标识
        options.header = {
            ...options.header,
            "source-client": "miniapp",
        };
        // console.log(options.url, '7777');

        if (options.url != 'https://api.coze.cn/open_api/v2/chat' && options.url != 'https://ai-sbbs.xyz/api/v1/protocols/getProtocols' && options.url != 'https://ai-sbbs.xyz/api/codeApi') {
            // let token = commonStorage.getStorageSync("token")
            // if (token) {
            //     options.header.Authorization = 'Bearer ' + token;
            // } else {
            //     uni.navigateTo({ url: "/pages/login/login" });
            // }

        }
        if (options.url == 'https://ai-sbbs.xyz/api/codeApi') {
            options.url = 'https://api.coze.cn/v3/chat'
            // options.url = 'https://api.coze.cn/open_api/v2/chat'
        }
    },
};
uni.addInterceptor("request", httpInterceptor);
uni.addInterceptor("uploadFile", httpInterceptor);

/**
 * 请求函数
 * @param  UniApp.RequestOptions
 * @returns Promise
 *  1. 返回 Promise 对象
 *  2. 获取数据成功
 *    2.1 提取核心数据 res.data
 *    2.2 添加类型，支持泛型
 *  3. 获取数据失败
 *    3.1 401错误  -> 清理用户信息，跳转到登录页
 *    3.2 其他错误 -> 根据后端错误信息轻提示
 *    3.3 网络错误 -> 提示用户换网络
 */

// 2.2 添加类型，支持泛型
export const http = (options) => {
    // 1. 返回 Promise 对象
    return new Promise((resolve, reject) => {
        uni.request({
            ...options,
            // 响应成功
            success(res) {
                //
                // 没有权限跳去登录页面
                if (res.data.code == '-401') {
                    uni.navigateTo({ url: "/pages/login/login" });
                } else {
                    resolve(res.data);
                }


            },
            // 响应失败
            fail(err) {
                reject(err);
            },
        });
    });
};
